using System.Collections.Generic;
using UnityEngine;
using System.Linq;

// 箱子库存的动态展示
public class DynamicInventoryDisplay : InventoryDisplay
{
    [SerializeField] protected InventorySlot_UI slotPrefab; // UI槽的预制体

    // 刷新动态库存的显示
    public void RefreshDynamicInventory(InventorySystem invToDisplay, int offset)
    {
        ClearSlots(); //清空现有的槽位
        inventorySystem = invToDisplay; 
        if (inventorySystem != null) inventorySystem.OnInventorySlotChanged += UpdateSlot; // 订阅库存系统的 OnInventorySlotChanged 事件，以便在槽位变化时更新显示
        AssignSlot(inventorySystem, offset); // 分配并显示当前库存系统的槽位
    }

    private void OnDisable() {
        if (inventorySystem != null) inventorySystem.OnInventorySlotChanged -= UpdateSlot;
    }

    public override void AssignSlot(InventorySystem invToDisplay, int offset)
    {
        slotDictionary = new Dictionary<InventorySlot_UI, InventorySlot>();
        if (invToDisplay == null) return;
        // 遍历物品槽数组，创建对应的UI槽，并进行初始化和更新
        for (int i = offset; i < invToDisplay.InventorySize; i++)
        {
            var uiSlot = Instantiate(slotPrefab, transform);
            slotDictionary.Add(uiSlot, invToDisplay.InventorySlots[i]);
            uiSlot.Init(invToDisplay.InventorySlots[i]); // 初始化UI槽
            uiSlot.UpdateUISlot(); // 更新UI槽状态
        }
    }

    private void ClearSlots()
    {
        // 销毁已有的UI槽
        foreach (var item in transform.Cast<Transform>())
        {
            Destroy(item.gameObject);
        }

        if (slotDictionary != null)
        {
            slotDictionary.Clear();
        }
    }
}
